import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)
// 从window的localstorage里获取存储好的产品数据
let car = JSON.parse(localStorage.getItem('buycar') || '[]')
let store = new Vuex.Store({
    state: {
        car: car
    },
    mutations: {
        // 将产品信息添加过来
        // 产品页面添加产品信息的时候获取的信息，判断之后放入localStorage里
        addtocar(state, shopinfo) {
            let flag = false
            state.car.some(res => {
                if (res.id === shopinfo.id) {
                    if ((res.buynum + shopinfo.buynum) >= shopinfo.maxnum) {
                        res.buynum = shopinfo.maxnum
                    } else {
                        res.buynum += shopinfo.buynum
                    }
                    flag = true
                    return true
                }
            })
            if (!flag) {
                state.car.push(shopinfo)
            }
            localStorage.setItem('buycar', JSON.stringify(state.car))
        },
        // 当页面双向绑定的数据改动时，出发这里的方法改动car里面的数据
        changecarnum(state, changnum) {
            for (let Key in changnum) {
                state.car.forEach(res => {
                    if (parseInt(res.id) == Key) {
                        res.buynum = changnum[Key]
                    }
                })
            }
            // changnum.forEach((res, i) => {
            //     state.car.forEach((result) => {
            //         if (result.id == (i + '')) {
            //             result.buynum = res
            //         }
            //     })
            // })
            localStorage.setItem('buycar', JSON.stringify(state.car))
        },
        // 删除某一个在购物车中的产品
        removelist(state, id) {
            state.car.some((res, i) => {
                if (res.id == id) {
                    state.car.splice(i, 1)
                }
            })
            // 每次都要更新local
            localStorage.setItem('buycar', JSON.stringify(state.car))
        },
        // 改变产品的switch状态,obj为双向绑定的数据
        switchchange(state, obj) {
            state.car.forEach(res => {
                    for (let item in obj) {
                        if (item == res.id) {
                            res.selected = obj[res.id]
                        }
                    }
                }
            )
            localStorage.setItem('buycar', JSON.stringify(state.car))
        }
    },
    getters: {
        // 这是底部的bar上的方法，用于计算全部数量
        AllCount(state) {
            let sum = 0;
            state.car.forEach(res => {
                sum += res.buynum
            })
            return sum
        },
        // 根据selected计算所有数量和价格
        getgoodsCountandAmout(state) {
            let o = {
                sumcount: 0,
                sumamount: 0
            }
            state.car.forEach(res => {
                if (res.selected) {
                    o.sumcount += parseInt(res.buynum)
                    o.sumamount += (parseInt(res.price) * parseInt(res.buynum))
                }
            })
            return o
        }
    }
})
export default store